"""
西游记主角统计：
1、通过读取文件将文件内容转为字符串
2、使用结巴分词，得到列表
3、循环遍历 处理列表的词语
   1）去掉单个词
   2）合并一些词，比如"行者"、"大圣" 、"老孙" 都统计为“悟空”
        "师父" "三藏""长老" 都是“唐僧”
        "悟净" "沙和尚" 都是“沙和尚”
   3）统计出每个单词的次数，保存在字典中，单词作key，次数为value
4、统计好后，还可以删除一些无意义的词
5、按词语出现的次数排序
6、输出
"""

import jieba

# with语句打开文件，会自动关闭文件,若编码还是无法解决特殊字符就忽略，errors='ignore'
with open('西游记.txt', 'r', encoding='GB18030') as f:
    s = f.read()
# 得到分词列表
list1 = jieba.lcut(s)
print(list1)
# 单词的次数，用字典来保存，单词做key，次数做value
# 循环遍历，处理列表单词
counts = {}
# 循环遍历，处理列表单词，统计单词出现的次数（counts字典）
for word in list1:
    if len(word) == 1:
        continue
    # 合并一些词
    elif word in ["行者", "大圣", "老孙"]:
        rword = '悟空'
    elif word in ["师傅", "三藏", "长老"]:
        rword = '唐僧'
    elif word in ["悟净" "沙和尚"]:
        rword = '沙和尚'
    else:
        rword = word
    # 统计单词出现的次数，字典中若没有该key(单词)，往字典中添加并设置value为1；若有，则将该key对应的value+1
    counts[rword] = counts.get(rword, 0) + 1
print(counts)
excludes = {"一个", "那里", "怎么", "我们", "不知", "两个", "甚么",
            "只见", "不是", "原来", "不敢", "闻言", "如何", "什么"}
# 字典中去掉这个干扰项
for word in excludes:
    del counts[word]
# 排序：sorted() 不改变原数据；列表的sort改变原数据
# 把字典转成列表，再用列表的sort()进行降序排序
items = list(counts.items())
print(items)
items.sort(key=lambda x: x[1], reverse=True)
print(items)
